#include "LED_STD_Config.h"  // 包含LED配置相关的宏定义和函数声明

/**
    ******************************************************************************
    * 函数名称：LED_STD_Config
    * 功能描述：初始化两个LED控制引脚（PB5和PE5）
    * 输入参数：无
    * 返回值  ：无
    * 详细说明：
    * 1. 配置PB5和PE5为50MHz推挽输出模式
    * 2. 初始状态：
    *    - PB5输出高电平（LED1熄灭）
    *    - PE5输出低电平（LED2点亮）
    * 3. 硬件要求：
    *    - LED阳极接3.3V，阴极接GPIO（共阳接法）
    *    - 需串联适当限流电阻（通常220Ω-1kΩ）
    * 调用示例：
    *   LED_STD_Config(); // 初始化后可通过GPIO_SetBits/ResetBits控制LED
    ******************************************************************************
**/
void LED_STD_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;  // GPIO初始化结构体（存储配置参数）

    /* 开启GPIOB和GPIOE时钟（APB2总线）：
       - STM32的GPIO外设时钟由APB2总线控制
       - 需先使能时钟，否则GPIO寄存器无法访问
       - RCC_APB2Periph_GPIOB：GPIOB时钟使能
       - RCC_APB2Periph_GPIOE：GPIOE时钟使能 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);

    /* 配置PB5为50MHz推挽输出：
       - GPIO_Pin_5：选择GPIOB的第5号引脚
       - GPIO_Mode_Out_PP：推挽输出模式（可输出高/低电平，驱动能力强）
       - GPIO_Speed_50MHz：引脚最大翻转速度50MHz（满足大多数LED控制需求） */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        // 选择引脚5
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最高速度
    GPIO_Init(GPIOB, &GPIO_InitStructure);            // 应用配置到GPIOB

    /* 配置PE5为50MHz推挽输出（复用相同结构体参数）：
       - 结构体参数与PB5相同，仅GPIO端口改为GPIOE */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_Init(GPIOE, &GPIO_InitStructure);            // 应用配置到GPIOE

    /* 设置初始状态：
       - 共阳接法下，GPIO输出高电平时LED熄灭，低电平时点亮
       - PB5（LED1）初始高电平 → 熄灭
       - PE5（LED2）初始高电平 → 熄灭（原注释描述为低电平点亮，此处代码与注释冲突，以代码为准） */
    GPIO_SetBits(GPIOB, GPIO_Pin_5);   // PB5输出高电平（LED1熄灭）
    GPIO_SetBits(GPIOE, GPIO_Pin_5);   // PE5输出高电平（LED2熄灭）
}

/**
    * 函数名称：Red_Led_ON
    * 功能描述：点亮红色LED（假设红色LED接PB5）
    * 实现逻辑：共阳接法下，拉低PB5（输出低电平）使LED导通
    * 调用示例：Red_Led_ON(); // 红色LED点亮
**/
void Red_Led_ON(void)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_5);  // PB5输出低电平（ResetBits=清0操作）
}

/**
    * 函数名称：Green_Led_ON
    * 功能描述：点亮绿色LED（假设绿色LED接PE5）
    * 实现逻辑：共阳接法下，拉低PE5（输出低电平）使LED导通
    * 调用示例：Green_Led_ON(); // 绿色LED点亮
**/
void Green_Led_ON(void)
{
    GPIO_ResetBits(GPIOE, GPIO_Pin_5);  // PE5输出低电平
}

/**
    * 函数名称：Red_Led_OFF
    * 功能描述：熄灭红色LED（接PB5）
    * 实现逻辑：共阳接法下，拉高PB5（输出高电平）使LED截止
    * 调用示例：Red_Led_OFF(); // 红色LED熄灭
**/
void Red_Led_OFF(void)
{
    GPIO_SetBits(GPIOB, GPIO_Pin_5);    // PB5输出高电平（SetBits=置1操作）
}

/**
    * 函数名称：Green_Led_OFF
    * 功能描述：熄灭绿色LED（接PE5）
    * 实现逻辑：共阳接法下，拉高PE5（输出高电平）使LED截止
    * 调用示例：Green_Led_OFF(); // 绿色LED熄灭
**/
void Green_Led_OFF(void)
{
    GPIO_SetBits(GPIOE, GPIO_Pin_5);    // PE5输出高电平
}
